﻿''' <summary>
''' Diese KI wird von einem anderen Computer aus gesteuert.
''' </summary>
''' <remarks></remarks>
Public Class KIPassivNetzwerk
    Inherits ObjektKI
    Public Befehle As New List(Of Befehl)
    Structure Befehl
        Public Sub New(ByVal Befehl As ObjektKI.KIModiExtern, ByVal KooX As Integer, ByVal KooY As Integer, ByVal WegX() As Integer, ByVal WegY() As Integer, ByVal OpferX As Integer, ByVal OpferY As Integer, ByVal AngreiferSchaden As Single, ByVal Verteidigerschaden As Single, ByVal Spieler As Integer)
            Me.Befehl = Befehl
            Me.KooX = KooX
            Me.KooY = KooY
            Me.WegX = WegX
            Me.WegY = WegY
            Me.OpferX = OpferX
            Me.OpferY = OpferY
            Me.AngreiferSchaden = AngreiferSchaden
            Me.Verteidigerschaden = Verteidigerschaden
            Me.Spieler = Spieler
        End Sub
        Public Befehl As ObjektKI.KIModiExtern
        Public KooX As Integer
        Public KooY As Integer
        Public WegX() As Integer
        Public WegY() As Integer
        Public OpferX As Integer
        Public OpferY As Integer
        Public AngreiferSchaden As Single
        Public Verteidigerschaden As Single
        Public Spieler As Integer
    End Structure
    Public Sub New(ByVal Spieler As ObjektSpieler)
        MyBase.New(Spieler, 0, 0, 0, Besetzungsprioritäten.Keine, GeldTPAngriffsModus.Beides, 0, 0, 0, 0)
        StartNeuerKIThreat()
    End Sub
    Public Overrides Sub KISchleife()
        SyncLock Befehle
            SyncLock Hauptmenü.NetzVorratsBefehle 'Alle Befehle die Vorrätig angelegt wurden, werden übernommen
                Dim NewBefehle As New List(Of Befehl)
                Dim I As Integer = 0
                While Hauptmenü.NetzVorratsBefehle.Count > 0 And I < Hauptmenü.NetzVorratsBefehle.Count
                    If Hauptmenü.NetzVorratsBefehle(I).Spieler = Spieler.Spieler Then
                        NewBefehle.Add(Hauptmenü.NetzVorratsBefehle(I))
                        I += 1
                    ElseIf Hauptmenü.NetzVorratsBefehle(I).Spieler = 0 Then
                        NewBefehle.Add(Hauptmenü.NetzVorratsBefehle(I))
                        I += 1
                    Else
                        Exit While
                    End If
                End While
                Hauptmenü.NetzVorratsBefehle.RemoveRange(0, I)
                For I = 0 To Befehle.Count - 1
                    NewBefehle.Add(Befehle(I))
                Next
               
                Befehle = NewBefehle
            End SyncLock
        End SyncLock
        While Schleife = False Or Befehle.Count > 0
            If Befehle.Count > 0 Then
                Dim AktuellerBefehl As Befehl
                SyncLock Befehle
                    AktuellerBefehl = Befehle(0)
                End SyncLock
                AngreiferSchaden = AktuellerBefehl.AngreiferSchaden
                VerteidigerSchaden = AktuellerBefehl.Verteidigerschaden
                'hier sollten wir auswählen und zwar Gabe,Gebäudebefehle,Beenden werden nicht ausgeführt
                Select Case AktuellerBefehl.Befehl
                    Case KIModiExtern.Schlachtwechseln
                        Schlachtwechsel(EinheitenSortierKriterien.Zufall)
                        KIWarten(8)
                    Case KIModiExtern.GabeEinsetzen
                        Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Gabe()
                        KIWarten(8)
                    Case KIModiExtern.SpezialgabeEinsetzen
                        Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Spezialgabe()
                        KIWarten(8)
                    Case KIModiExtern.DoppelGabeEinsetzen
                        Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Doppelgabe()
                        KIWarten(8)
                    Case KIModiExtern.RundenEnde
                        Schleife = True
                    Case KIModiExtern.Wechsel
                        Schleife = True
                        RundenEndeMitWechsel = True
                        Spieler.Wechsel()
                    Case KIModiExtern.EinheitBauen
                        GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, _
                                         GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.WegX(0), AktuellerBefehl.Spieler, AktuellerBefehl.WegY(0)), 0)
                    Case KIModiExtern.FabrikBauen
                        GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, _
                                        GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.WegX(0), AktuellerBefehl.Spieler, AktuellerBefehl.WegY(0)), 0)
                    Case KIModiExtern.OmegaRaketeStarten
                        GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2)
                    Case KIModiExtern.OmegaUpgradeKaufen
                        GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2)
                    Case KIModiExtern.Schuss
                        GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2)
                    Case KIModiExtern.Entladen
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0)
                    Case KIModiExtern.SiloZünden
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0)
                    Case KIModiExtern.GebäudeBauen
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0)
                    Case KIModiExtern.FlugzeugträgerBau
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                         GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.AngreiferSchaden, AktuellerBefehl.Spieler, AktuellerBefehl.Verteidigerschaden), Nothing, 0)
                    Case KIModiExtern.Angriff
                        If Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
                            Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        New EinheitAmphibienpanzer(0, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), Nothing, 0)

                        Else
                            Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht), Nothing, 0)

                        End If
                    Case KIModiExtern.Leuchtrakete
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                        AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                        New EinheitAmphibienpanzer(0, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), Nothing, 0)
                    Case KIModiExtern.WetterWechsel
                        Objektverwalter.Spielfeld.Regeln.Wetter = AktuellerBefehl.KooX
                    Case KIModiExtern.WolkeBewegen
                        Objektverwalter.Spielfeld.WolkenBewegen(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY)
                    Case KIModiExtern.EinheitVerbessern
                        Dim Einheit As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX)
                        If Not Einheit Is Nothing Then 'Sollte immer etwas sein.
                            Einheit.ATKDEFBoost.X += AktuellerBefehl.OpferY
                            Einheit.Bewegungsbonus += AktuellerBefehl.AngreiferSchaden
                        End If
                    Case KIModiExtern.EinheitTreibstoffSetzen
                        Dim Einheit As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX)
                        If Not Einheit Is Nothing Then
                            'Treibstoff festsetzen
                            Einheit.Sprit = AktuellerBefehl.OpferY
                        End If
                    Case KIModiExtern.VulkanFeuer
                        Dim Vulkan As GebäudeVulkan = Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, ObjektSpielfeld.Bodenschlacht).Gebäude
                        Dim Ziele(AktuellerBefehl.WegX.Length - 1) As Point
                        For I = 0 To AktuellerBefehl.WegX.Length - 1
                            Ziele(I) = New Point(AktuellerBefehl.WegX(I), AktuellerBefehl.WegY(I))
                        Next
                        Vulkan.Feuer(Ziele)
                    Case Else
                        Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                         AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                         Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht), Nothing, 0)
                End Select

                SyncLock Befehle
                    Befehle.RemoveAt(0)
                End SyncLock
            Else
                Threading.Thread.Sleep(10)
            End If

        End While

    End Sub
    Public Sub DoOrder(ByVal AktuellerBefehl As Befehl)
        AngreiferSchaden = AktuellerBefehl.AngreiferSchaden
        VerteidigerSchaden = AktuellerBefehl.Verteidigerschaden
        'hier sollten wir auswählen und zwar Gabe,Gebäudebefehle,Beenden werden nicht ausgeführt
        Select Case AktuellerBefehl.Befehl
            Case KIModiExtern.Schlachtwechseln
                Objektverwalter.Spielfeld.SchlachtWechseln()
            Case KIModiExtern.GabeEinsetzen
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Gabe()
            Case KIModiExtern.SpezialgabeEinsetzen
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Spezialgabe()
            Case KIModiExtern.DoppelGabeEinsetzen
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Doppelgabe()
            Case KIModiExtern.RundenEnde
                Objektverwalter.Spielfeld.RundenEnde()
                Objektverwalter.Spielfeld.RundenAnfang()
            Case KIModiExtern.Wechsel
                Objektverwalter.Spielfeld.AktuellerSpieler.Wechsel()
                Objektverwalter.Spielfeld.RundenAnfang()
            Case KIModiExtern.EinheitBauen
                GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, _
                                 GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.WegX(0), AktuellerBefehl.Spieler, AktuellerBefehl.WegY(0)), 0, False)
            Case KIModiExtern.FabrikBauen
                GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, _
                                GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.WegX(0), AktuellerBefehl.Spieler, AktuellerBefehl.WegY(0)), 0, False)
            Case KIModiExtern.OmegaRaketeStarten
                GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2, False)
            Case KIModiExtern.OmegaUpgradeKaufen
                GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2, False)
            Case KIModiExtern.Schuss
                GebäudeAuswählen(AktuellerBefehl.Befehl, Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude, New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), 2, False)
            Case KIModiExtern.Entladen
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0, False)
            Case KIModiExtern.SiloZünden
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0, False)
            Case KIModiExtern.GebäudeBauen
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                New EinheitAmphibienpanzer(AktuellerBefehl.Spieler, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, True), Nothing, 0, False)
            Case KIModiExtern.FlugzeugträgerBau
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                 GenereateUnit(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, AktuellerBefehl.AngreiferSchaden, AktuellerBefehl.Spieler, AktuellerBefehl.Verteidigerschaden), Nothing, 0, False)
            Case KIModiExtern.Angriff
                If Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
                    Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                New EinheitAmphibienpanzer(0, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), Nothing, 0, False)

                Else
                    Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht), Nothing, 0, False)

                End If
            Case KIModiExtern.Leuchtrakete
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                New EinheitAmphibienpanzer(0, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY), Nothing, 0, False)
            Case KIModiExtern.WetterWechsel
                Objektverwalter.Spielfeld.Regeln.Wetter = AktuellerBefehl.KooX
            Case KIModiExtern.WolkeBewegen
                Objektverwalter.Spielfeld.WolkenBewegen(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX, AktuellerBefehl.OpferY)
            Case KIModiExtern.EinheitVerbessern
                Dim Einheit As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX)
                If Not Einheit Is Nothing Then 'Sollte immer etwas sein.
                    Einheit.ATKDEFBoost.X += AktuellerBefehl.OpferY
                    Einheit.Bewegungsbonus += AktuellerBefehl.AngreiferSchaden
                End If
            Case KIModiExtern.EinheitTreibstoffSetzen
                Dim Einheit As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, AktuellerBefehl.OpferX)
                If Not Einheit Is Nothing Then
                    'Treibstoff festsetzen
                    Einheit.Sprit = AktuellerBefehl.OpferY
                End If
            Case KIModiExtern.VulkanFeuer
                Dim Vulkan As GebäudeVulkan = Objektverwalter.Spielfeld.Landschaften(AktuellerBefehl.KooX, AktuellerBefehl.KooY, ObjektSpielfeld.Bodenschlacht).Gebäude
                Dim Ziele(AktuellerBefehl.WegX.Length - 1) As Point
                For I = 0 To AktuellerBefehl.WegX.Length - 1
                    Ziele(I) = New Point(AktuellerBefehl.WegX(I), AktuellerBefehl.WegY(I))
                Next
                Vulkan.Feuer(Ziele)
            Case Else
                Einheitauswählen(Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.KooX, AktuellerBefehl.KooY, Objektverwalter.Spielfeld.MomentaneSchlacht), _
                                 AktuellerBefehl.WegX, AktuellerBefehl.WegY, AktuellerBefehl.Befehl, _
                                 Objektverwalter.Spielfeld.Einheiten(AktuellerBefehl.OpferX, AktuellerBefehl.OpferY, Objektverwalter.Spielfeld.MomentaneSchlacht), Nothing, 0, False)
        End Select
    End Sub

    Public Sub AddBefehl(ByVal NeuBefehl As Befehl)
        SyncLock Befehle
            Befehle.Add(NeuBefehl)
        End SyncLock
    End Sub

    Public Function GenereateUnit(ByVal X As Integer, ByVal Y As Integer, ByVal EinheitenID As Integer, ByVal Spieler As Integer, ByVal HatSichBewegt As Boolean) As ObjektEinheit
        Return ObjektLadeklasse.NewEinheit(Objektverwalter.AlleEinheiten(EinheitenID).EinheitenID, Spieler, X, Y, HatSichBewegt)
    End Function

    Protected Overrides Function CalculateRealZiel(ByRef WSS As Wegsuchsystem, ByVal Ziel As System.Drawing.Point, ByVal Einheit As ObjektEinheit, ByRef Opfer As System.Drawing.Point) As System.Drawing.Point
        Return Ziel
    End Function
End Class
